#include "string.h"

namespace gojo
{

    void test01 ()
    {

        string s1 ;

        string s2 ("abc") ;

        string s3 (s2) ;

    }

    void test02 ()
    {

        string s1 ("abcd") ;
 
        const string s2 ("abcd") ;

    }

    void test03 ()
    {

        string s1 ("1234") ;

        cout << s1.c_str () << endl ;

        s1.push_back ('a') ;

        cout << s1.c_str () << endl ;

        s1.append ("abcd") ;

        cout << s1.c_str () << endl ;

        s1 += 'c' ;

        cout << s1.c_str () << endl ;

        s1 += "cdef" ;
        
        cout << s1.c_str () << endl ;

        s1.insert (0 , 's') ;

        cout << s1.c_str () << endl ;

        s1.insert (0 , "jk") ;

        cout << s1.c_str () << endl ;

    }

    void test04 ()
    {

        string s1 ;

        s1.append ("abcdefghijklnmopqrstuvwxyz") ;

        cout << s1.c_str () << endl ;

        s1.pop_back () ;

        cout << s1.c_str () << endl ;

        s1.erase (5 , 3) ;

        cout << s1.c_str () << endl ;

        s1.erase (15) ;

        cout << s1.c_str () << endl ;

        s1.clear () ;

        cout << s1.c_str () << endl ;

    }

    void test05 ()
    {

        string s1 ;

        s1 = "abcdef" ;

        cout << s1.c_str () << endl ;

        cout << s1 [3] << endl ;

        s1 [3]++ ;

        cout << s1 [3] << endl ;

        const string s2 ("abcdef") ;

        cout << s2 [3] << endl ;

    }

    void test06 ()
    {

        string s1 ("abcdefg") ;

        size_t a = s1.find ('g') ;

        cout << a << endl ;

        a = s1.find ('z') ;

        cout << a << endl ;

        cout << s1 << endl ;

        a = s1.find ("cdef") ;

        cout << a << endl ;

        cout << (s1.substr (0)) << endl ;

    }

    void test07 ()
    {

        string s1 ("hello") ;

        string s2 ("hello") ;

        string s3 ("hellox") ;

        cout << (s1 < s2) << endl ;

        cout << (s2 < s3) << endl ;

        cout << (s3 < s2) << endl ;

        cout << endl ;

        cout << (s1 >= s2) << endl ;

        cout << (s1 >= s3) << endl ;

        cout << endl ;

        cout << (s3 > s1) << endl ;

        cout << endl ;

        cout << (s1 <= s3) << endl ;

        cout << endl ;

        cout << (s1 == s2) << endl ;

        cout << endl ;

        cout << (s1 != s3) << endl ;

        cout << endl ;

    }

    void test08 ()
    {

        string s1 ;

        string s2 ;

        cin >> s1 >> s2 ;

        cout << s1 << endl << s2 << endl << endl ;

        swap (s1 , s2) ;

        cout << s1 << endl << s2 << endl << endl ;

        getline (cin , s1) ;

        getline (cin , s2) ;

        cout << s1 << endl << s2 ;
        
    }
    
}

int main ()
{

    // gojo::test01 () ; // 测试函数的构造和析构

    // gojo::test02 () ; // 测试函数的拷贝构造

    // gojo::test03 () ; // 测试函数的增加功能

    // gojo::test04 () ; // 测试函数的删除功能

    // gojo::test05 () ; // 测试函数的修改功能

    // gojo::test06 () ; // 测试函数的查找功能

    // gojo::test07 () ; // 测试函数的比较功能

    gojo::test08 () ; // 测试函数的输入功能和交换函数

    return 0 ;

}